#include <SFML/Graphics.hpp>
#include <vector>
#include "Entities.h"
#include "Utils.h"

using namespace sf;
using namespace std;

class ControlComponent
{
public:
	virtual void Update(Entity&) = 0;
};

class InputControlComponent
{
public:
	InputControlComponent(Input&);
	virtual void Update(Entity&);
private:
        const Input& input;
};

class AIControlComponent
{
public:
	virtual void Update(Entity&, vector<Entity*>&);
};

class PhysicsComponent
{
public:
	virtual void Update(Entity&, vector<Entity*>&, float) = 0;
};

class CharacterPhysicsComponent
{
public:
	virtual void Update(Entity&, vector<Entity*>&, float);
};

class GraphicsComponent
{
public:
	virtual void Draw(Entity&, RenderWindow&) = 0;
};

class SpriteGraphicsComponent
{
public:
	SpriteGraphicsComponent(Image&);
	virtual void Draw(Entity&, RenderWindow&);
private:
	Sprite sprite;
};
